package rz.syn;

/**
 * synchronized的锁是针对当前对象的,不是针对类
 * @author dingdahai
 *
 */
public class Thread2 {
	public void m4t1() {
		synchronized (this) {
			int i = 15;
			while (i-- > 0) {
				System.out
						.println(Thread.currentThread().getName() + " : " + i);
				try {
					Thread.sleep(500);
				} catch (InterruptedException ie) {
				}
			}
		}
	}

	/*
	 * 当一个线程访问object的一个synchronized(this)同步代码块时，
	 * 其他线程对object中所有其它synchronized(this)同步代码块的
	 * 访问将被阻塞。
	 */
	public void m4t2() {
		//synchronized (this) {
			int i = 15;
			while (i-- > 0) {
				System.out
						.println(Thread.currentThread().getName() + " : " + i);
				try {
					Thread.sleep(300);
				} catch (InterruptedException ie) {
				}
			}
		//}
	}

	/*
	 * 当一个线程访问object的一个synchronized(this)同步代码块时，
	 * 另一个线程仍然可以访问该object中的非synchronized(this)同 步代码块。
	 */
	public static void main(String[] args) {
		final Thread2 myt2 = new Thread2();
		Thread t1 = new Thread(new Runnable() {
			public void run() {
				myt2.m4t1();
			}
		}, "t1");
		Thread t2 = new Thread(new Runnable() {
			public void run() {
				myt2.m4t2();
			}
		}, "t2");
		t1.start();
		t2.start();
	}
}